1 using System.Collections;
2 using
System.Collections.Generic;
3 using
UnityEngine;
4
5 public
class PawnMovement : Movement, IPieceMovement {
6     
7     
private bool didSpecialMove = false;
8     
private Node[] specialNodes = null;
9     
10     
private GCPlayer p1;
11     
private GCPlayer p2;
12     
private Grid grid;
13
14     
public PawnMovement(GCPlayer player, Piece piece) : base(player,piece) {
15         BoundComputations += ComputeBound;
16         GameManager.SwitchedEvent += OnSwitchEvent;
17         specialNodes =
new Node[2];
18
19         p1 = GameManager.Instance.P1;
20         p2 = GameManager.Instance.P2;
21         grid = GameManager.Instance.Grid;
22     }
23
24     
public override void ComputeBound() {
25         Node currNode = piece.Node;
26         
int origRow = currNode.row;
27         
int origCol = currNode.col;
28         
29         Node frontNode =
null;
30         Node leftEatNode =
null;
31         Node rightEatNode =
null;
32
33         
int toAdd = 0;
34         
if (p1.Has(piece)) {
35             toAdd =
1;
36         }
else {
37             toAdd = -
1;
38         }
39
40         frontNode = grid.GetNodeAt(origRow + toAdd, origCol);
41         leftEatNode = grid.GetNodeAt(origRow + toAdd, origCol -
1);
42         rightEatNode = grid.GetNodeAt(origRow + toAdd, origCol +
1);
43
44         ComputeEatPiece(leftEatNode);
45         ComputeEatPiece(rightEatNode);
46         ComputeMovePiece(frontNode);
47
48         
if (!moved && !didSpecialMove) {
49             
if (frontNode.EmptySpace) {
50                 specialNodes[
0] = frontNode;
51                 specialNodes[
1] = grid.GetNodeAt(origRow + toAdd * 2, origCol);
52                 ComputeMovePiece(specialNodes[
1]);
53             }
54         }
55     }
56
57     
public void OnSwitchEvent() {
58         
if (!IsTurn()) return;
59         
if (specialNodes[0] == null || specialNodes[1] == null) return;
60         
61         
if (moved && didSpecialMove) { // on next move
62             Debug.Log(
"released en passant" );
63             
if (specialNodes[0] != null && specialNodes[0].Piece == piece) {
64                 specialNodes[
0].Piece = null;
65             }
66             specialNodes[
0] = null;
67             specialNodes[
1] = null;
68         }
69     }
70
71     
public override void Moved() {
72         
if (specialNodes[0] == null && specialNodes[1] == null) return;
73
74         
if (!moved) {
75             moved =
true;
76             
if (specialNodes[1] == piece.Node) {
77                 didSpecialMove =
true;
78                 specialNodes[
0].Piece = piece;
79             }
80         }
81     }
82 }


if (moved && didSpecialMove) { on next move



Gõ tìm kiếm nhanh...